package org.xg.study.servlet;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.net.URLDecoder;
import java.net.URLEncoder;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * @author CMG
 * @version 1.0
 * @description
 * @cLassName LoginTimeServlet
 * @date 2021/9/24 11:05
 **/
@WebServlet("/loginTime")
public class LoginTimeServlet extends HttpServlet {
    private static final long serialVersionUID = -5604481158386227221L;

    /**
     * 1.获取所有的cookie，判断是否是第一次访问
     * 2.如果是第一次访问
     * * 输出欢迎，记录当前的时间，回写到浏览器
     * 3.如果不是第一次访问
     * * 获取时间，输出到浏览器，记录当前的时间，回写到浏览器。
     * 记录当前的时间，回写到浏览器。
     */
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        // 设置字符中文乱码问题
        resp.setContentType("text/html;charset=UTF-8");
        // 获取所有的cookie
        Cookie[] cookies = req.getCookies();
        // 通过指定cookie名称来查找cookie      Cookie c = new Cookie("last","当前的时间");
        Cookie cookie = getCookieByName(cookies, "lastTime");
        // 判断，如果cookie==null，说明是第一次访问
        if (cookie == null) {
            // 输出欢迎，记录当前的时间，回写到浏览器
            resp.getWriter().write("<h1>编程帮  www.biancheng.net</h1>"
                    + "<h3>编程帮，欢迎您的到来！</h3>");
        } else {
            // 获取cookie的值，输出浏览器，记录当前的时间，回写到浏览器
            String value = cookie.getValue();
            // 输出浏览器（cookie的值中含有 “ ”,需要进行解码）
            resp.getWriter().write("<h1>编程帮  www.biancheng.net</h1>"
                    + "<h3>编程帮，欢迎您的归来</h3><h3>您上次的时间是" + URLDecoder.decode(value) + "</h3>"
                    + "<a href=\"/servletCookie/removeCookie\" > 清除COOKIE</a>");
        }
        // 记录当前的时间
        Date date = new Date();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String sDate = sdf.format(date);
        // 回写到浏览器
        // 使用cookie回写（cookie的值中含有 “ ”,需要进行编码才能使用）
        Cookie c = new Cookie("lastTime", URLEncoder.encode(sDate));
        // 设置有效时间为一天
        c.setMaxAge(60 * 60 * 24);    // 秒
        // 设置有效路径
        c.setPath("/servletCookie");
        // 回写
        resp.addCookie(c);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }

    //通过指定名称查找指定的cookie    
    public static Cookie getCookieByName(Cookie[] cookies, String name) {
        // 如果数组是null
        if (cookies == null) {
            return null;
        } else {
            // 循环遍历，目的：和name进行匹配，如果匹配成功，返回当前的cookie
            for (Cookie cookie : cookies) {
                // 获取cookie的名称，和name进行匹配
                if (cookie.getName().equals(name)) {
                    return cookie;
                }
            }
            return null;
        }
    }
}
